iT邦幫忙

2024 iThome 鐵人賽

DAY 13
2
自我挑戰組

AI救我系列 第 13

Day 13 - 多狹縫不同波長繞射強度in python

  • 分享至 

  • xImage
  •  

接著前天的多狹縫,今天來嘗試讓不同波長的光通過多狹縫吧!

程式碼如下:

import numpy as np
import matplotlib.pyplot as plt


#define multiple slits
def multi_slit_x(spacing, n): #spacing狹縫間隔, n為狹縫數量
    return [-spacing*(n-1)/2 +spacing*i for i in range(n)] #以0為中心的間隔,從最左邊開始。
    
    
D = 10 #繪圖範圍-5~5
d = 1  #狹縫寬度
N = 501 #繪圖間隔(精度)
spacing = 1 #狹縫間隔
n = 6  #狹縫數量
x_list = multi_slit_x(spacing, n) #帶入狹縫數據
source = [1/n for i in range(len(x_list))]  #將x_list和光source長度統一

def phase_term(kx, x): #處理complex,也就是公式中dx以前的部分
    phase = complex(0, -kx*x) #前面放實部(這裡面沒有,所以為0),後面為虛部-kx*x
    return np.exp(phase) #呼叫exponential e的i次方

def Fraunhofer_1D(lamda, x, z, source, x_list, dx): #dx就是D/N(寬),source帶入phase term就是每段高度做積分
    kx = 2*np.pi/lamda*x/z #讓kx可以帶入lamda和z的變數
    output = 0
    for i in range(len(x_list)):
        rec_area = source[i]*phase_term(kx, x_list[i])*dx #黎曼和長方形面積
        output += rec_area  #不斷地跑回圈加長方形面積
    return output

K = 2*np.pi*10
kx_list = [-K/2 + K*i/N for i in range(N)] #波數(空間上的分佈)
D2 = 532*10**-7*6
Z2 = 100
x2_list = [-D2/2 + D2*i/N for i in range(N)]
lamda1 = 480*10**-9 #藍光波長
lamda2 = 532*10**-9 #綠光波長
lamda3 = 606*10**-9 #紅光波長

far_field1 = [Fraunhofer_1D(lamda1, x2_list[i], Z2, source, x_list, 1) for i in range(N)] #1是兩個波源相加的結果
intensity1 = [abs(far_field1[i])**2 for i in range(N)]

far_field2 = [Fraunhofer_1D(lamda2, x2_list[i], Z2, source, x_list, 1) for i in range(N)] #1是兩個波源相加的結果
intensity2 = [abs(far_field2[i])**2 for i in range(N)]

far_field3 = [Fraunhofer_1D(lamda3, x2_list[i], Z2, source, x_list, 1) for i in range(N)] #1是兩個波源相加的結果
intensity3 = [abs(far_field3[i])**2 for i in range(N)]

plt.plot(kx_list, intensity1, color = 'dodgerblue')
plt.plot(kx_list, intensity2, color = 'mediumaquamarine')
plt.plot(kx_list, intensity3, color = 'lightcoral')
plt.title('1DFourierTransform_multi_slit')
plt.ylabel('Intensity')
plt.legend()
plt.show()

這次改變內容為:

  1. 讓波數kx可以帶入波長
  2. 給出D2 光強度的觀察區域的長度和藍綠紅波長數值
  3. 將遠場計算和強度計算依照光色各跑一次

於是得到:
https://ithelp.ithome.com.tw/upload/images/20240925/201684428Pprl1Q07H.png

這次的程式碼主要也是助教提供,整段丟給chatGPT請他解釋在幹嘛都沒問題,或問其中變數的物理意義也能正確回答。

感恩讚嘆助教,感恩讚嘆AI,莽人如我都能享受物理和coding!


上一篇
Day 12 光學繞射:AI版多狹縫一維傅立葉轉換
下一篇
Day 14 - Matplotlib animation 用python製作動畫!基礎介紹
系列文
AI救我31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言